/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grafico.calculos;

import calculos.MetodoCalculo;
import calculos.MetodoIMC;
import presenter.PacientePresenter;
import persistencia.Pacientes;
import model.Paciente;
import model.ResultadoAvaliacao;

/**
 *
 * @author Kdc
 */
public class CalcularIMC implements CalcularClassificacao {
    
    private double abaixoF = 0;
    private double normalF = 0;
    private double marginalmenteAcimaF = 0;
    private double acimaPesoF = 0;
    private double obesidadeF = 0;
    
    private double abaixoM = 0;
    private double normalM = 0;
    private double marginalmenteAcimaM = 0;
    private double acimaPesoM = 0;
    private double obesidadeM = 0;
    
    private int qntMulheres = 0;
    private int qntHomens = 0;
    
    private MetodoCalculo metodoCalculo;
    private Pacientes pacientes = new Pacientes();
    private PacientePresenter controlaPaciente = new PacientePresenter(pacientes);
    ResultadoAvaliacao resultadoAvaliacao;

    public CalcularIMC() {
        
        calcularClassificacaoFeminino();
        calcularClassificacaoMaculino();        
    }
    
    
    

    @Override
    public void calcularClassificacaoFeminino() {

        controlaPaciente.carregarPacientes();
        
        for (int i = 0; i < pacientes.getPacientes().size(); i++) 
        {
            Paciente paciente = pacientes.getPacientes().get(i);
            
            metodoCalculo = new MetodoIMC();
            metodoCalculo.calcula(paciente);
            
            
            if (paciente.getSexo() == 'F') 
            {
                qntMulheres = qntMulheres + 1;
                
                for (int j = 0; j < paciente.getResultados().size(); j++) 
                {    
                    if(paciente.getResultados().get(j).getMetodo().equalsIgnoreCase("IMC"))
                    {
                        resultadoAvaliacao = paciente.getResultados().get(j);
                    }
                }
                
                if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Abaixo do Peso")) 
                {
                    abaixoF++;
                    
                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("No Peso Normal")) 
                {
                    normalF++;
                    
                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Marginalmente Acima do Peso")) 
                {
                    marginalmenteAcimaF++;
                    
                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Acima do Peso Ideal")) 
                {
                    acimaPesoF++;
                    
                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Obeso")) 
                {
                    obesidadeF++;
                }

            }
        }
        CalcularPorcentagemFeminino();


    }

    private void CalcularPorcentagemFeminino() 
    {
        abaixoF = (abaixoF * 100) / qntMulheres;
        normalF = (normalF * 100) / qntMulheres;
        marginalmenteAcimaF = (marginalmenteAcimaF * 100) / qntMulheres;
        acimaPesoF = (acimaPesoF * 100) / qntMulheres;
        obesidadeF = (obesidadeF * 100) / qntMulheres;
    }

    @Override
    public void calcularClassificacaoMaculino() {

        controlaPaciente.carregarPacientes();
        
        for (int i = 0; i < pacientes.getPacientes().size(); i++) 
        {
            Paciente paciente = pacientes.getPacientes().get(i);
            metodoCalculo = new MetodoIMC();
            metodoCalculo.calcula(paciente);
            
            if (paciente.getSexo() == 'M') 
            {
                qntHomens = qntHomens + 1;
                
                for (int j = 0; j < paciente.getResultados().size(); j++) 
                {    
                    if(paciente.getResultados().get(j).getMetodo().equalsIgnoreCase("IMC"))
                    {
                        resultadoAvaliacao = paciente.getResultados().get(j);
                    }
                }
                
                
                if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Abaixo do Peso")) 
                {   
                    abaixoM++;
                    
                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("No Peso Normal")) 
                {
                    normalM++;
                    
                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Marginalmente Acima do Peso"))
                {
                    marginalmenteAcimaM++;
                    
                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Acima do Peso Ideal")) 
                {
                    acimaPesoM++;
                    
                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Obeso")) 
                {
                    obesidadeM++;
                }

            }
        }
        CalcularPorcentagemMasculino();

    }

    private void CalcularPorcentagemMasculino() 
    {
        abaixoM = (abaixoM * 100) / qntHomens;
        normalM = (normalM * 100) / qntHomens;
        marginalmenteAcimaM = (marginalmenteAcimaM * 100) / qntHomens;
        acimaPesoM = (acimaPesoM * 100) / qntHomens;
        obesidadeM = (obesidadeM * 100) / qntHomens;
    }

    public double getAbaixoF() {
        return abaixoF;
    }

    public void setAbaixoF(double abaixoF) {
        this.abaixoF = abaixoF;
    }

    public double getNormalF() {
        return normalF;
    }

    public void setNormalF(double normalF) {
        this.normalF = normalF;
    }

    public double getMarginalmenteAcimaF() {
        return marginalmenteAcimaF;
    }

    public void setMarginalmenteAcimaF(double marginalmenteAcimaF) {
        this.marginalmenteAcimaF = marginalmenteAcimaF;
    }

    public double getAcimaPesoF() {
        return acimaPesoF;
    }

    public void setAcimaPesoF(double acimaPesoF) {
        this.acimaPesoF = acimaPesoF;
    }

    public double getObesidadeF() {
        return obesidadeF;
    }

    public void setObesidadeF(double obesidadeF) {
        this.obesidadeF = obesidadeF;
    }

    public double getAbaixoM() {
        return abaixoM;
    }

    public void setAbaixoM(double abaixoM) {
        this.abaixoM = abaixoM;
    }

    public double getNormalM() {
        return normalM;
    }

    public void setNormalM(double normalM) {
        this.normalM = normalM;
    }

    public double getMarginalmenteAcimaM() {
        return marginalmenteAcimaM;
    }

    public void setMarginalmenteAcimaM(double marginalmenteAcimaM) {
        this.marginalmenteAcimaM = marginalmenteAcimaM;
    }

    public double getAcimaPesoM() {
        return acimaPesoM;
    }

    public void setAcimaPesoM(double acimaPesoM) {
        this.acimaPesoM = acimaPesoM;
    }

    public double getObesidadeM() {
        return obesidadeM;
    }

    public void setObesidadeM(double obesidadeM) {
        this.obesidadeM = obesidadeM;
    }

    public int getQntMulheres() {
        return qntMulheres;
    }

    public void setQntMulheres(int qntMulheres) {
        this.qntMulheres = qntMulheres;
    }

    public int getQntHomens() {
        return qntHomens;
    }

    public void setQntHomens(int qntHomens) {
        this.qntHomens = qntHomens;
    }

    public MetodoCalculo getMetodoCalculo() {
        return metodoCalculo;
    }

    public void setMetodoCalculo(MetodoCalculo metodoCalculo) {
        this.metodoCalculo = metodoCalculo;
    }

    public Pacientes getPacientes() {
        return pacientes;
    }

    public void setPacientes(Pacientes pacientes) {
        this.pacientes = pacientes;
    }

    public PacientePresenter getControlaPaciente() {
        return controlaPaciente;
    }

    public void setControlaPaciente(PacientePresenter controlaPaciente) {
        this.controlaPaciente = controlaPaciente;
    }
    
    
    
}
